多段SSHをAnsibleで設定する
渡辺です。
セキュリティを高めるなどの理由で対象インスタンスにEIPを付与しない場合、SSHは踏み台(Bastion)経由となります(参考: Amazon VPC環境にメンテナンス用の踏み台サーバを構築する)。 踏み台サーバのある構成でAnsibleを利用する場合、ansible.cnfのssh_connectionでssh_argsを設定しましょう。
ssh_configの準備
はじめにsshのconfigファイルを作成します。 これは、~/.ssh/configに設定するファイルの一部と考えて良いでしょう。 Ansibleのファイルと一緒にバージョン管理する方が良いと思うので、Ansibleのプロジェクトルートにおくことをおすすめします。
Host bastion HostName 52.52.xxx.xxx User ec2-user IdentityFile ~/.ssh/prd.pem Host web1a HostName 10.0.11.100 User ec2-user IdentityFile ~/.ssh/prd.pem ProxyCommand ssh -W %h:%p bastion
作成したならば、次のようなコマンドで動作確認をしておきます。
$ ssh -F ssh_config web1a
ssh_configに問題がなければ、これで多段SSHが成功します。
ansible.cnfの修正
ansible.cnfを修正し、AnsibleがSSH接続する時のオプションを修正します。 例えば次のように変更してください。
[ssh_connection] control_path = %(directory)s/%%h-%%r ssh_args = -o ControlPersist=15m -F ssh_config -q
ポイントは、Fオプションでssh_configファイルを指定している部分です。
動作確認
最後にAnsibleで疎通確認を行います。
$ ansible all -m ping web1a | success >> { "changed": false, "ping": "pong" }
まとめ
SSHの多段ログイン設定をconfigに書けば簡単に踏み台経由でAnsibleを利用できます。
なお、現時点ではまだリリースされていませんが、Ansible のVersion2以降では、Group Varsの「ansible_ssh_extra_args」を利用する方がスマートになりそうです。